/*
 * Copyright (c)  2008 Sebastien Tremblay
 *
 * id3-tag-builder - settings.ApplicationSettings.java
 *
 * All source and documentation is copyrighted by Sebastien Tremblay
 * (seb at ryders dot net) and made available under the Apache License 2.0.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * $Id: ApplicationSettings.java 33 2010-04-02 07:47:55Z ryders $
 */
package com.empireone.id3tagbuilder.settings;

import com.empireone.id3tagbuilder.classes.Format;
import com.empireone.id3tagbuilder.classes.Path;
import java.util.Locale;
import java.util.Vector;

/**
 * The <code>ApplicationSetting</code> interface defines the behaviour between the
 * application and the settings datastore.
 *
 * @author Sebastien Tremblay
 */
public interface ApplicationSettings {

    /**
     *
     * @return
     */
    public Vector<Format> getFormats();

    /**
     *
     * @return
     */
    public Vector<Path> getPaths();

    /**
     *
     * @return
     */
    public Locale getLocale();


    /**
     *
     * @return
     */
    public String getVersion();
    
    /**
     *
     * @return
     */
    public String getWinManager();

    /**
     *
     * @return
     */
    public String getArtFilenames();

    /**
     *
     * @return
     */
    public String getTagLib();

    /**
     *
     * @return
     */
    public int getAlbumArtSize();

    /**
     *
     * @return
     */
    public boolean getDisplayDetails();

    /**
     *
     * @return
     */
    public boolean getMaintainMusicDb();

    /**
     *
     * @return
     */
    public String getMusicDbUri();

    /**
     *
     * @return
     */
    public String getMusicDbType();

    /**
     *
     * @return
     */
    public boolean getWriteId3v1();

    /**
     *
     * @return
     */
    public boolean getWriteId3v2();

    /**
     *
     * @return
     */
    public boolean getNormTrackNo();

    /**
     *
     * @return
     */
    public boolean getCleanupTags();

    /**
     *
     * @return
     */
    public boolean getEmbedArt();

    /**
     *
     * @param value
     */
    public void setDisplayDetails(boolean value);

    /**
     *
     * @param value
     */
    public void setMaintainMusicDb(boolean value);

    /**
     *
     * @param value
     */
    public void setWriteId3v1(boolean value);

    /**
     *
     * @param value
     */
    public void setWriteId3v2(boolean value);

    /**
     *
     * @param value
     */
    public void setWriteTrackDiscNo(boolean value);

    /**
     *
     * @param value
     */
    public void setCleanupTags(boolean value);

    /**
     *
     * @param value
     */
    public void setEmbedArt(boolean value);

    /**
     *
     */
    public void save();

    /**
     *
     */
    public static class DefaultSettings {

	/**
	 *
	 * @return
	 */
	public static String getLocale() {
            return "en";
        }

	/**
	 *
	 * @return
	 */
	public static String getWinManager() {
            return "os";
        }

	/**
	 *
	 * @return
	 */
	public static String getArtFilenames() {
            return "folder.jpg;folder.gif;cover.jpg;albumart.jpg";
        }

	/**
	 *
	 * @return
	 */
	public static String getTagLib() {
            return "jid3";
        }

	/**
	 *
	 * @return
	 */
	public static int getAlbumArtSize() {
            return 25600;
        }

	/**
	 *
	 * @return
	 */
	public static boolean maintainMusicDb() {
            return false;
        }

	/**
	 *
	 * @return
	 */
	public static String getMusicDbUri() {
            return "music";
        }

	/**
	 *
	 * @return
	 */
	public static String getMusicDbType() {
            return "sqlite";
        }

	/**
	 *
	 * @return
	 */
	public static boolean displayDetails() {
            return true;
        }

	/**
	 *
	 * @return
	 */
	public static boolean writeId3v1() {
            return true;
        }

	/**
	 *
	 * @return
	 */
	public static boolean writeId3v2() {
            return true;
        }

	/**
	 *
	 * @return
	 */
	public static boolean writeMultiSets() {
            return true;
        }

	/**
	 *
	 * @return
	 */
	public static boolean cleanupTags() {
            return true;
        }

	/**
	 *
	 * @return
	 */
	public static boolean embedArt() {
            return true;
        }
    }
}
